
//声明构造函数
function Promise(executor){

    //为实例对象添加属性(this)
    //添加属性
    this.PromiseState="pending";
    this.PromiseResult=null;

    //预先保存实例对象的this值
    const self=this; //常见形式命名:that,self,_this

    //resolve函数
    function resolve(data){

        //这里的this指向的是window
        //console.log(this);//所以这里直接用this赋值,改的并不是实例对象,而是全局的window对象

            //判断状态
            if(self.PromiseState !== "pending") return;
        
            //1.修改对象的状态(promiseState)
            self.PromiseState="fulfilled"; //resolved
            //2.修改对象结果值 (promiseResult)
            self.PromiseResult=data;
    }

    //reject函数
    function reject(data){

            //判断状态
            if(self.PromiseState !== "pending") return;
            //1.修改对象的状态(promiseState)
            self.PromiseState="rejected";        
            //2.修改对象结果值 (promiseResult)
            self.PromiseResult=data;
    }

    try{
         //同步调用【执行器函数】
        executor(resolve,reject);
    }catch(e){
        //修改Promise对象的状态为【失败】
        reject(e);
    }
   
}

//添加then方法
Promise.prototype.then=function(onResolved,onRejected){

    //调用回调函数
    //判断实例对象的PromiseState属性
    //在then方法中怎么去判断PromiseState属性?
    //可以使用this获取,因为then方法是实例对象调用的
    if(this.PromiseState === 'fulfilled'){
        onResolved(this.PromiseResult);
    }

    if(this.PromiseState === 'rejected'){
        onRejected(this.PromiseResult);
    }
    
}